/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model.gestion_jeu;

import controller.PartieController;
import java.util.Observable;
import model.jeu_de_dame.Damier;
import model.jeu_de_dame.Piece;
import model.util.Couleur;

 /**
 * <b>PartieModel est la seule classe qui doit être vue du côté controller. Elle contient seulement
 *    les méthodes qui doivent être visible par le controller.
 *    Cette classe implemente Observable et est abstraite.
 * </b>
 * 
 * @see PartieController
 * @see Partie
 * @see Observable
 * @author nabil mansouri
 * @version 2.0
 */
public abstract class PartieModel extends Observable{
   //le controlleur et les vues ne verront pas ttes les methodes de damiers mais seulement celle qui sont proposé ici
    
       /**
         * Initialise le damier ainsi que ses cases et ses pions puis notifie les observateurs d'un changement.   
         * Cette méthode est abstraite.
         * @see Partie#initialisation() 
         */
    public abstract void initialisation();
    
      /**
         * Renvoie le Joueur pour lequel son tour est arrivé.
         * Cette méthode est abstraite
         * @see Partie#getJoueurTour() 
        * @return Le joueur à qui le tour est arrivé 
     */
    public abstract Joueur getJoueurTour();
    
       /**
         * Retourne le damier. Cette méthode est abstraite.
         * 
         * @see Partie#getDamier() 
        * @return Le damier de la partie
     */
    public abstract Damier getDamier();
    
    /**
         * Retourne vrai si la partie est finie, faux sinon. La partie est finie si un des deux 
         * joueurs n'a plus de pions. Cette méthode est abstraite.
         * 
         * @see Partie#isFinie()
        * @return Vrai si la partie est finie faux sinon
     */
    public abstract boolean isFinie(); 
    
         /**
         * Retourne le joueur qui a gagné la partie si la partie est finie.
         * Si la partie n'est pas finie,renvoie null. Cette méthode est abstraite.
         * 
         * @see Partie#getVainqueur()  
     */
    public abstract Joueur getVainqueur();
    
      /**
         * Retourne le joueur blanc de la partie. Cette méthode est abstraite.
         * 
         * @see Partie#getJoueurBlanc() 
        * @return Le joueur blanc de la partie
     */
    public abstract Joueur getJoueurBlanc();
    
        /**
         * Retourne le joueur noir de la partie. Cette méthode est abstraite.
         * 
         * @see Partie#getJoueurNoir() 
        * @return Le joueur noir de la partie
     */
    public abstract Joueur getJoueurNoir();
    
    public abstract Piece selectionPion(int x, int y);
    
    public abstract Couleur getCouleurTour();
 
    public abstract boolean selectionCase( int xCase, int yCase, Piece p);
}
